package com.han.verifycode;

import com.han.verifycode.data.Answer;
import com.han.verifycode.data.FullPath;
import com.han.verifycode.data.RightKey;
import com.han.verifycode.utils.StrUtil;

import java.io.File;

import static com.han.verifycode.SystemConst.FILE_SPLITER;
import static com.han.verifycode.SystemConst.IMAGE_TYPE;

/**
 * 验证码入口类
 */
public interface VerifyCode {

    /**
     * 生成
     *
     * @return
     */
    default RightKey generate(CodeConfig config) {
        String code = StrUtil.generateRandomCode();
        return generate(code, config);
    }

    /**
     * 生成
     * 随机码外部提供
     *
     * @return
     */
    RightKey generate(String code, CodeConfig config);

    /**
     * 验证
     * 本包不提供RightKey 的存储 所以需要自行查找RightKey
     *
     * @param rightKey
     * @param answer
     * @return
     */
    boolean verify(RightKey rightKey, Answer answer);

    CodeConfig getConfig();

    /**
     * 生成图片路径
     *
     * @param basePath
     * @param code
     * @return
     */
    default FullPath generateFilePath(String basePath, String code) {
        FullPath path= new FullPath();
        StringBuilder filePath = new StringBuilder();
        //绝对路径计算
        filePath.append(basePath);
        filePath.append(FILE_SPLITER);
        filePath.append(StrUtil.getDateStr());
        File f = new File(filePath.toString());
        if (!f.exists()) {
            f.mkdirs();
        }
        filePath.append(FILE_SPLITER);
        filePath.append(code);
        filePath.append(IMAGE_TYPE);
        path.setAbsolutePath(filePath.toString());
        //相对路径计算 去掉basePath
        filePath=new StringBuilder();
        filePath.append(FILE_SPLITER);
        filePath.append(StrUtil.getDateStr());
        filePath.append(FILE_SPLITER);
        filePath.append(code);
        filePath.append(IMAGE_TYPE);
        path.setRelatePath(filePath.toString());
        return path;
    }
}
